package com.zykj.spb.study.controller;

import com.zykj.spb.study.exception.CustomException;
import com.zykj.spb.study.validate.DateTime;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Title: ExceptionController
 * @Project: ${MODEL_NAME}
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 21
 * @since 2018/12/19-14:21
 */
@Controller
@RequestMapping("exception")
//TODO 一定要记得添加这个标识
@Validated
public class ExceptionController {

    @GetMapping("/test2")
    public String test2() {
        Map<String, String> result = new HashMap<>(16);
        // TODO 直接捕获所有代码块，然后在 cache
        try {
            int i = 10 / 0;
            result.put("code", "200");
            result.put("data", "具体返回的结果集");
        } catch (Exception e) {
            result.put("code", "500");
            result.put("message", "请求错误");
        }
        return "view/index";
    }


    @GetMapping("/test3")
    public String test3(Integer num) {
        // TODO 演示需要，实际上参数是否为空通过 @RequestParam(required = true)  就可以控制
        if (num == null) {
            throw new CustomException(400, "num不能为空");
        }
        int i = 10 / num;
        return "view/index";
    }

    @GetMapping("/test4")
    public String test4(@NotNull(message = "num不能为空  anntation") @Min(value = 10, message = "最小不能小于10") Integer num) {
        // TODO 演示需要，实际上参数是否为空通过 @RequestParam(required = true)  就可以控制
        int i = 10 / num;
        return "view/index";
    }

    @GetMapping("/dateformat")
    @ResponseBody
    public String test4(@DateTime(message = "日期格式错误", format = "yyyy-MM-dd HH:mm")
                                    @NotBlank(message = "日期参数不能为空") String date) {

        return date;
    }
}
